package Java_IO;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;

/**
 * @author shy_black
 * @date 2019/3/19 23:20
 * @Description:  字节输出流
 *
 * 流模型的操作流程：
 * 1.取得终端对象
 * 2.根据终端对象取得输入输出流
 * 3.根据输入输出流进行数据的读取和写入
 * 4.关闭流
 *
 * I/o操作属于资源处理，所有资源处理（IO操作，数据库操作，网络操作）使用后必须关闭
 *
 * 字节（byte）流：原生操作，无序转换，可以处理文本文件，jpg，MP4，等视频。
 * InputStream.OutputStream
 *
 * 字节输出流OutputStream
 * public abstract class OutputStreamimpl Closeable，Flushable{}
 *
 *Close():关闭流方法
 * Flush()：刷新缓冲区
 *
 *核心方法：
 *     public void write(byte b[]) throws IOException -->将给定字节数组全部输出
 *     public void write(byte b[], int off, int len) throws IOException
 *     将给定字节数组以off位置开始，输出len长度后停止
 *     public abstract void write(int b) throws IOException;
 *     输出单个字节
 * 使用OutputStream输出数据时，若指定文件不存在，FileOutputStream会自动创建文件(不包含创建目录)
 *使用FileOutputStream输出内容时默认为文件内容的覆盖操作
 *若要进行文件内容追加，使用如下构造方法：
 * public FileOutputstream（File file,boolean append）//append设为true即可追加
 *
 * 字符（char）流：经过处理后的操作，只用于处理文本。换行使用\r\n完成
 * Reader，Writer
 *
 * 输入，输出是按照对象自己的位置分辨的
 *
 * JDK7的AutoCloneable
 * 需要用try，catch处理
 */

//字节输出流

public class 字节流与字符流 {
    public static void main(String[] args) throws  Exception{
        //1.取得终端对象
        File file = new File("C:\\Users\\shy_black\\Desktop\\java.txt");
        //2.根据终端取得输出流
        OutputStream out = new FileOutputStream(file,false);
        //3.进行数据的输出
        String str = "hello world";
        String str1 = "\r\n";
        String str2 = "lalala";
        out.write(str.getBytes());
        out.write(str1.getBytes());
        out.write(str2.getBytes());
        out.close();
    }

}
